; 代码清单
; 主引导扇区代码
; mbr_05.asm
; 2024-09-21 22:33

; 设置附加段ES为0xb800
    mov ax, 0xb800
    mov es, ax

; 字符写入缓存
    mov byte [es:0x00], 'L'
    mov byte [es:0x01], 0x07
    mov byte [es:0x02], 'a'
    mov byte [es:0x03], 0x07
    mov byte [es:0x04], 'b'
    mov byte [es:0x05], 0x07
    mov byte [es:0x06], 'e'
    mov byte [es:0x07], 0x07
    mov byte [es:0x08], 'l'
    mov byte [es:0x09], 0x07
    mov byte [es:0x0a], ' '
    mov byte [es:0x0b], 0x07
    mov byte [es:0x0c], 'o'
    mov byte [es:0x0d], 0x07
    mov byte [es:0x0e], 'f'
    mov byte [es:0x0f], 0x07
    mov byte [es:0x10], 'f'
    mov byte [es:0x11], 0x07
    mov byte [es:0x12], 's'
    mov byte [es:0x13], 0x07
    mov byte [es:0x14], 'e'
    mov byte [es:0x15], 0x07
    mov byte [es:0x16], 't'
    mov byte [es:0x17], 0x07
    mov byte [es:0x18], ':'
    mov byte [es:0x19], 0x07

; 计算地址各位的数值
    mov ax, number          ; number处的地址传送到ax寄存器 dx:ax作为被除数
    mov bx, 10              ; bx=10作为除数

; 将数据段配置为代码段地址,
    mov cx, cs
    mov ds, cx

    mov dx, 0
    div bx
    mov [0xc700+number+0x00], dl    ; 存放个位数

    xor dx, dx
    div bx
    mov [0xc700+number+0x01], dl    ; 存放十位数

    xor dx, dx
    div bx
    mov [0xc700+number+0x02], dl    ; 存放百位数

    xor dx, dx
    div bx
    mov [0xc700+number+0x03], dl    ; 存放千位数

    xor dx, dx
    div bx
    mov [0xc700+number+0x04], dl    ; 存放万位数

; 显示地址各位的数值
    mov al, [0xc700+number+0x04]
    add al, 0x30
    mov [es:0x1a], al
    mov byte [es:0x1b], 0x02

    mov al, [0xc700+number+0x03]
    add al, 0x30
    mov [es:0x1c], al
    mov byte [es:0x1d], 0x02

    mov al, [0xc700+number+0x02]
    add al, 0x30
    mov [es:0x1e], al
    mov byte [es:0x1f], 0x01

    mov al, [0xc700+number+0x01]
    add al, 0x30
    mov [es:0x20], al
    mov byte [es:0x21], 0x01

    mov al, [0xc700+number+0x00]
    add al, 0x30
    mov [es:0x22], al
    mov byte [es:0x23], 0x01

; 自我循环
infi: jmp near infi

; 数据区
number: db 0,0,0,0,0

; 0数据填充到510字节
    times 510 - ($ - $$) db 0

; 设置主引导扇区标志0x55,0xaa
    db 0x55, 0xaa
